{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T05:12:39.605784Z",
     "start_time": "2019-03-12T05:12:30.355777Z"
    }
   },
   "outputs": [],
   "source": [
    "\"\"\"\n",
    "GBDT-LR模型\n",
    " 1.准备GBDT输入的label encoding\n",
    " 2.准备GBDT输入的 one-hot encoding\n",
    " 3.建立GBDT-LR模型，并训练调参\n",
    " 4.预测结果    \n",
    "    \n",
    "\"\"\"\n",
    "\n",
    "##==================== 导入工具包 ====================##\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import random\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.ensemble import GradientBoostingClassifier\n",
    "from sklearn.linear_model import SGDClassifier  # using SGDClassifier for training incrementally\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from dummyPy import OneHotEncoder  # for one-hot encoding on a large scale of chunks\n",
    "from sklearn.metrics import log_loss\n",
    "import matplotlib.pyplot as plt\n",
    "import pickle\n",
    "import gc\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T05:12:39.630720Z",
     "start_time": "2019-03-12T05:12:39.608774Z"
    }
   },
   "outputs": [],
   "source": [
    "##==================== 文件路径 ====================##\n",
    "\n",
    "\n",
    "## 子训练集\n",
    "fp_sub_train_f = \"feature_engineering\\sub_train_f.csv\"\n",
    "fp_sub_test_f = \"feature_engineering\\sub_test_f.csv\"\n",
    "\n",
    "## label encoder for gbdt input\n",
    "fp_lb_enc = \"feature_engineering\\lb_enc\"\n",
    "\n",
    "## one-hot encoder for gbdt output\n",
    "fp_oh_enc_gbdt = \"gbdt\\oh_enc_gbdt\"\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T05:12:39.662628Z",
     "start_time": "2019-03-12T05:12:39.640690Z"
    }
   },
   "outputs": [],
   "source": [
    "##==================== GBDT 模型 ====================##\n",
    "## feature names\n",
    "cols = ['C1',\n",
    "        'banner_pos', \n",
    "        'site_domain', \n",
    "        'site_id',\n",
    "        'site_category',\n",
    "        'app_id',\n",
    "        'app_category', \n",
    "        'device_type', \n",
    "        'device_conn_type',\n",
    "        'C14', \n",
    "        #'C15',\n",
    "        #'C16',\n",
    "        'date',\n",
    "        'time_period',\n",
    "        'weekday',\n",
    "        'C15_C16'  ]\n",
    "\n",
    "cols_train = ['id', 'click']\n",
    "cols_test  = ['id']\n",
    "cols_train.extend(cols)\n",
    "cols_test.extend(cols)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T05:13:23.000956Z",
     "start_time": "2019-03-12T05:12:49.275255Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "24"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#----- data for GBDT (label encoding) -----#\n",
    "df_train = pd.read_csv(fp_sub_train_f)  # data load\n",
    "\n",
    "\n",
    "## label 编码的转换\n",
    "label_enc = pickle.load(open(fp_lb_enc, 'rb'))\n",
    "for col in cols:\n",
    "    df_train[col] = label_enc[col].fit_transform(df_train[col].values)\n",
    "\n",
    "## 为GBDT 和LR 模型训练分别分割数据\n",
    "## 这为了防止过拟合\n",
    "X_train_org = df_train[cols].get_values()\n",
    "y_train_org = df_train['click'].get_values()\n",
    "\n",
    "# 30% 做验证集，70%做训练集\n",
    "X_train_gbdt, X_valid, y_train_gbdt, y_valid = train_test_split(X_train_org, y_train_org, test_size = 0.3, random_state = 0)\n",
    "\n",
    "\n",
    "del df_train\n",
    "\n",
    "gc.collect()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T05:13:37.959415Z",
     "start_time": "2019-03-12T05:13:37.934482Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GradientBoostingClassifier(criterion='friedman_mse', init=None,\n",
       "                           learning_rate=0.2, loss='deviance', max_depth=8,\n",
       "                           max_features=None, max_leaf_nodes=None,\n",
       "                           min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "                           min_samples_leaf=10, min_samples_split=20,\n",
       "                           min_weight_fraction_leaf=0.0, n_estimators=100,\n",
       "                           n_iter_no_change=None, presort='auto',\n",
       "                           random_state=1, subsample=0.01, tol=0.0001,\n",
       "                           validation_fraction=0.1, verbose=0,\n",
       "                           warm_start=False)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#----- GBDT 模型训练-----#\n",
    "#----- 默认参数-----#\n",
    "\n",
    "params = {  # init the hyperparams of GBDT\n",
    "    'learning_rate': 0.2,\n",
    "    'n_estimators': 100,  # number of trees here\n",
    "    'max_depth': 8,  # set max_depth of a tree\n",
    "    'min_samples_split': 20, \n",
    "    'min_samples_leaf': 10,\n",
    "    'subsample': 0.01, \n",
    "    'max_leaf_nodes': None,  # set max leaf nodes of a tree\n",
    "    'random_state': 1,\n",
    "    'verbose': 0\n",
    "    }\n",
    "\n",
    "max_merror = float('Inf')\n",
    "best_params = {}\n",
    "\n",
    "gbdt_model = GradientBoostingClassifier(random_state=10)\n",
    "gbdt_model.set_params(**params)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T06:42:15.720501Z",
     "start_time": "2019-03-12T05:13:41.008911Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "training: n_estimators =  10\n",
      "log loss of GBDT on train set: 0.42678\n",
      "log loss of GBDT on valid set: 0.42684\n",
      "training: n_estimators =  20\n",
      "log loss of GBDT on train set: 0.42385\n",
      "log loss of GBDT on valid set: 0.42439\n",
      "training: n_estimators =  30\n",
      "log loss of GBDT on train set: 0.42478\n",
      "log loss of GBDT on valid set: 0.42573\n",
      "training: n_estimators =  40\n",
      "log loss of GBDT on train set: 0.42567\n",
      "log loss of GBDT on valid set: 0.42655\n",
      "training: n_estimators =  50\n",
      "log loss of GBDT on train set: 0.42726\n",
      "log loss of GBDT on valid set: 0.42805\n",
      "training: n_estimators =  60\n",
      "log loss of GBDT on train set: 0.42732\n",
      "log loss of GBDT on valid set: 0.42831\n",
      "training: n_estimators =  70\n",
      "log loss of GBDT on train set: 0.42862\n",
      "log loss of GBDT on valid set: 0.43045\n",
      "training: n_estimators =  80\n",
      "log loss of GBDT on train set: 0.42916\n",
      "log loss of GBDT on valid set: 0.43196\n",
      "training: n_estimators =  90\n",
      "log loss of GBDT on train set: 0.42883\n",
      "log loss of GBDT on valid set: 0.43179\n",
      "training: n_estimators =  100\n",
      "log loss of GBDT on train set: 0.42954\n",
      "log loss of GBDT on valid set: 0.43316\n",
      "training: n_estimators =  110\n",
      "log loss of GBDT on train set: 0.42975\n",
      "log loss of GBDT on valid set: 0.43443\n",
      "training: n_estimators =  120\n",
      "log loss of GBDT on train set: 0.42942\n",
      "log loss of GBDT on valid set: 0.43423\n",
      "{'n_estimators': 20}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#----- GBDT 调参 -----#\n",
    "\n",
    "### 1. n_estimators\n",
    "\n",
    "log_loss_train = []\n",
    "log_loss_valid = []\n",
    "\n",
    "for nt in range(10,130,10):\n",
    "    print('training: n_estimators = ', nt)\n",
    "    \n",
    "    params['n_estimators'] = nt\n",
    "    gbdt_model.set_params(**params)\n",
    "    gbdt_model.fit(X_train_gbdt, y_train_gbdt)\n",
    "    # scores\n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_train_gbdt)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_train_gbdt, y_pred_gbdt)\n",
    "    print('log loss of GBDT on train set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_train.append(log_loss_gbdt)\n",
    "    \n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_valid)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_valid, y_pred_gbdt)\n",
    "    print('log loss of GBDT on valid set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_valid.append(log_loss_gbdt)\n",
    "    \n",
    "    mean_merror = log_loss_gbdt\n",
    "    \n",
    "\n",
    "    if mean_merror < max_merror:\n",
    "        max_merror = mean_merror\n",
    "        best_params['n_estimators'] = nt\n",
    "        \n",
    "\n",
    "print(best_params)\n",
    "\n",
    "params['n_estimators'] = best_params['n_estimators']\n",
    "    \n",
    "\n",
    "gc.collect()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T06:42:16.171683Z",
     "start_time": "2019-03-12T06:42:15.743444Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "## plot the curve\n",
    "f1 = plt.figure(1)\n",
    "n_estimators =  range(10,130,10)\n",
    "plt.plot(n_estimators, log_loss_train, label='train')\n",
    "plt.plot(n_estimators, log_loss_valid, label='valid')\n",
    "plt.xlabel('n_estimators')\n",
    "plt.ylabel('log_loss')\n",
    "plt.title('n_estimators')\n",
    "plt.legend()\n",
    "plt.grid(True, linewidth=0.3)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "max_merror = float('Inf')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T08:33:21.972559Z",
     "start_time": "2019-03-12T07:41:35.909951Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "training: max_depth =  2\n",
      "log loss of GBDT on train set: 0.43751\n",
      "log loss of GBDT on valid set: 0.43655\n",
      "training: max_depth =  3\n",
      "log loss of GBDT on train set: 0.43202\n",
      "log loss of GBDT on valid set: 0.43194\n",
      "training: max_depth =  4\n",
      "log loss of GBDT on train set: 0.42824\n",
      "log loss of GBDT on valid set: 0.42829\n",
      "training: max_depth =  5\n",
      "log loss of GBDT on train set: 0.42574\n",
      "log loss of GBDT on valid set: 0.42577\n",
      "training: max_depth =  6\n",
      "log loss of GBDT on train set: 0.42537\n",
      "log loss of GBDT on valid set: 0.42554\n",
      "training: max_depth =  7\n",
      "log loss of GBDT on train set: 0.42453\n",
      "log loss of GBDT on valid set: 0.42464\n",
      "training: max_depth =  8\n",
      "log loss of GBDT on train set: 0.42385\n",
      "log loss of GBDT on valid set: 0.42439\n",
      "training: max_depth =  9\n",
      "log loss of GBDT on train set: 0.42471\n",
      "log loss of GBDT on valid set: 0.42596\n",
      "training: max_depth =  10\n",
      "log loss of GBDT on train set: 0.42548\n",
      "log loss of GBDT on valid set: 0.42629\n",
      "training: max_depth =  11\n",
      "log loss of GBDT on train set: 0.42525\n",
      "log loss of GBDT on valid set: 0.42595\n",
      "training: max_depth =  12\n",
      "log loss of GBDT on train set: 0.42591\n",
      "log loss of GBDT on valid set: 0.42685\n",
      "{'n_estimators': 20, 'max_depth': 8}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### max_depth\n",
    "log_loss_train = []\n",
    "log_loss_valid = []\n",
    "\n",
    "for md in range(2,13,1):\n",
    "    print('training: max_depth = ', md)\n",
    "    \n",
    "    params['max_depth'] = md\n",
    "    gbdt_model.set_params(**params)\n",
    "    gbdt_model.fit(X_train_gbdt, y_train_gbdt)\n",
    "    # scores\n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_train_gbdt)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_train_gbdt, y_pred_gbdt)\n",
    "    print('log loss of GBDT on train set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_train.append(log_loss_gbdt)\n",
    "    \n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_valid)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_valid, y_pred_gbdt)\n",
    "    print('log loss of GBDT on valid set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_valid.append(log_loss_gbdt)\n",
    "    \n",
    "    \n",
    "    mean_merror = log_loss_gbdt\n",
    "    \n",
    "\n",
    "    if mean_merror < max_merror:\n",
    "        max_merror = mean_merror\n",
    "        best_params['max_depth'] = md\n",
    "                \n",
    "print(best_params) \n",
    "params['max_depth'] = best_params['max_depth']\n",
    "  \n",
    "\n",
    "gc.collect()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T08:33:22.238842Z",
     "start_time": "2019-03-12T08:33:21.985523Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "## plot the curve\n",
    "f1 = plt.figure(2)\n",
    "max_depths = range(2,13,1)\n",
    "plt.plot(max_depths, log_loss_train, label='train')\n",
    "plt.plot(max_depths, log_loss_valid, label='valid')\n",
    "plt.xlabel('max_depth')\n",
    "plt.ylabel('log_loss')\n",
    "plt.title('max_depth')\n",
    "plt.legend()\n",
    "plt.grid(True, linewidth=0.3)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "max_merror = float('Inf')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T09:57:12.428434Z",
     "start_time": "2019-03-12T09:00:24.359171Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "training: min_samples_split =  5\n",
      "log loss of GBDT on train set: 0.42385\n",
      "log loss of GBDT on valid set: 0.42439\n",
      "training: min_samples_split =  10\n",
      "log loss of GBDT on train set: 0.42385\n",
      "log loss of GBDT on valid set: 0.42439\n",
      "training: min_samples_split =  15\n",
      "log loss of GBDT on train set: 0.42385\n",
      "log loss of GBDT on valid set: 0.42439\n",
      "training: min_samples_split =  20\n",
      "log loss of GBDT on train set: 0.42385\n",
      "log loss of GBDT on valid set: 0.42439\n",
      "training: min_samples_split =  25\n",
      "log loss of GBDT on train set: 0.42376\n",
      "log loss of GBDT on valid set: 0.42363\n",
      "training: min_samples_split =  30\n",
      "log loss of GBDT on train set: 0.42434\n",
      "log loss of GBDT on valid set: 0.42489\n",
      "training: min_samples_split =  35\n",
      "log loss of GBDT on train set: 0.42393\n",
      "log loss of GBDT on valid set: 0.42416\n",
      "training: min_samples_split =  40\n",
      "log loss of GBDT on train set: 0.42525\n",
      "log loss of GBDT on valid set: 0.42560\n",
      "training: min_samples_split =  45\n",
      "log loss of GBDT on train set: 0.42416\n",
      "log loss of GBDT on valid set: 0.42452\n",
      "training: min_samples_split =  50\n",
      "log loss of GBDT on train set: 0.42385\n",
      "log loss of GBDT on valid set: 0.42441\n",
      "training: min_samples_split =  55\n",
      "log loss of GBDT on train set: 0.42329\n",
      "log loss of GBDT on valid set: 0.42361\n",
      "training: min_samples_split =  60\n",
      "log loss of GBDT on train set: 0.42335\n",
      "log loss of GBDT on valid set: 0.42343\n",
      "training: min_samples_split =  65\n",
      "log loss of GBDT on train set: 0.42342\n",
      "log loss of GBDT on valid set: 0.42357\n",
      "training: min_samples_split =  70\n",
      "log loss of GBDT on train set: 0.42434\n",
      "log loss of GBDT on valid set: 0.42443\n",
      "training: min_samples_split =  75\n",
      "log loss of GBDT on train set: 0.42319\n",
      "log loss of GBDT on valid set: 0.42344\n",
      "training: min_samples_split =  80\n",
      "log loss of GBDT on train set: 0.42306\n",
      "log loss of GBDT on valid set: 0.42330\n",
      "training: min_samples_split =  85\n",
      "log loss of GBDT on train set: 0.42265\n",
      "log loss of GBDT on valid set: 0.42267\n",
      "training: min_samples_split =  90\n",
      "log loss of GBDT on train set: 0.42366\n",
      "log loss of GBDT on valid set: 0.42340\n",
      "training: min_samples_split =  95\n",
      "log loss of GBDT on train set: 0.42401\n",
      "log loss of GBDT on valid set: 0.42427\n",
      "{'n_estimators': 20, 'max_depth': 8, 'min_samples_split': 85}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "2564"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### min_samples_split\n",
    "log_loss_train = []\n",
    "log_loss_valid = []\n",
    "\n",
    "for mss in range(5,100,5):\n",
    "    print('training: min_samples_split = ', mss)\n",
    "    \n",
    "    params['min_samples_split'] = mss\n",
    "    gbdt_model.set_params(**params)\n",
    "    gbdt_model.fit(X_train_gbdt, y_train_gbdt)\n",
    "    # scores\n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_train_gbdt)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_train_gbdt, y_pred_gbdt)\n",
    "    print('log loss of GBDT on train set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_train.append(log_loss_gbdt)\n",
    "    \n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_valid)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_valid, y_pred_gbdt)\n",
    "    print('log loss of GBDT on valid set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_valid.append(log_loss_gbdt)\n",
    "    \n",
    "    mean_merror = log_loss_gbdt\n",
    "    \n",
    "\n",
    "    if mean_merror < max_merror:\n",
    "        max_merror = mean_merror\n",
    "        best_params['min_samples_split'] = mss\n",
    "                \n",
    "print(best_params) \n",
    "params['min_samples_split'] = best_params['min_samples_split']\n",
    "\n",
    "gc.collect()\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T09:57:12.715778Z",
     "start_time": "2019-03-12T09:57:12.444390Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "## plot the curve\n",
    "f1 = plt.figure(3)\n",
    "min_samples_splits = range(5,100,5)\n",
    "plt.plot(min_samples_splits, log_loss_train, label='train')\n",
    "plt.plot(min_samples_splits, log_loss_valid, label='valid')\n",
    "plt.xlabel('min_samples_split')\n",
    "plt.ylabel('log_loss')\n",
    "plt.title('min_samples_split')\n",
    "plt.legend()\n",
    "plt.grid(True, linewidth=0.3)\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "max_merror = float('Inf')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T11:42:35.867172Z",
     "start_time": "2019-03-12T10:25:15.972877Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "training: min_samples_leaf =  1\n",
      "log loss of GBDT on train set: 0.42639\n",
      "log loss of GBDT on valid set: 0.42684\n",
      "training: min_samples_leaf =  2\n",
      "log loss of GBDT on train set: 0.42423\n",
      "log loss of GBDT on valid set: 0.42467\n",
      "training: min_samples_leaf =  3\n",
      "log loss of GBDT on train set: 0.42464\n",
      "log loss of GBDT on valid set: 0.42524\n",
      "training: min_samples_leaf =  4\n",
      "log loss of GBDT on train set: 0.42399\n",
      "log loss of GBDT on valid set: 0.42459\n",
      "training: min_samples_leaf =  5\n",
      "log loss of GBDT on train set: 0.42442\n",
      "log loss of GBDT on valid set: 0.42482\n",
      "training: min_samples_leaf =  6\n",
      "log loss of GBDT on train set: 0.42313\n",
      "log loss of GBDT on valid set: 0.42341\n",
      "training: min_samples_leaf =  7\n",
      "log loss of GBDT on train set: 0.42348\n",
      "log loss of GBDT on valid set: 0.42330\n",
      "training: min_samples_leaf =  8\n",
      "log loss of GBDT on train set: 0.42349\n",
      "log loss of GBDT on valid set: 0.42350\n",
      "training: min_samples_leaf =  9\n",
      "log loss of GBDT on train set: 0.42369\n",
      "log loss of GBDT on valid set: 0.42360\n",
      "training: min_samples_leaf =  10\n",
      "log loss of GBDT on train set: 0.42265\n",
      "log loss of GBDT on valid set: 0.42267\n",
      "training: min_samples_leaf =  11\n",
      "log loss of GBDT on train set: 0.42375\n",
      "log loss of GBDT on valid set: 0.42392\n",
      "training: min_samples_leaf =  12\n",
      "log loss of GBDT on train set: 0.42223\n",
      "log loss of GBDT on valid set: 0.42271\n",
      "training: min_samples_leaf =  13\n",
      "log loss of GBDT on train set: 0.42306\n",
      "log loss of GBDT on valid set: 0.42304\n",
      "training: min_samples_leaf =  14\n",
      "log loss of GBDT on train set: 0.42295\n",
      "log loss of GBDT on valid set: 0.42265\n",
      "training: min_samples_leaf =  15\n",
      "log loss of GBDT on train set: 0.42377\n",
      "log loss of GBDT on valid set: 0.42373\n",
      "training: min_samples_leaf =  16\n",
      "log loss of GBDT on train set: 0.42256\n",
      "log loss of GBDT on valid set: 0.42267\n",
      "training: min_samples_leaf =  17\n",
      "log loss of GBDT on train set: 0.42290\n",
      "log loss of GBDT on valid set: 0.42334\n",
      "training: min_samples_leaf =  18\n",
      "log loss of GBDT on train set: 0.42330\n",
      "log loss of GBDT on valid set: 0.42326\n",
      "training: min_samples_leaf =  19\n",
      "log loss of GBDT on train set: 0.42299\n",
      "log loss of GBDT on valid set: 0.42328\n",
      "training: min_samples_leaf =  20\n",
      "log loss of GBDT on train set: 0.42360\n",
      "log loss of GBDT on valid set: 0.42329\n",
      "training: min_samples_leaf =  21\n",
      "log loss of GBDT on train set: 0.42367\n",
      "log loss of GBDT on valid set: 0.42354\n",
      "training: min_samples_leaf =  22\n",
      "log loss of GBDT on train set: 0.42363\n",
      "log loss of GBDT on valid set: 0.42371\n",
      "training: min_samples_leaf =  23\n",
      "log loss of GBDT on train set: 0.42375\n",
      "log loss of GBDT on valid set: 0.42386\n",
      "training: min_samples_leaf =  24\n",
      "log loss of GBDT on train set: 0.42409\n",
      "log loss of GBDT on valid set: 0.42433\n",
      "training: min_samples_leaf =  25\n",
      "log loss of GBDT on train set: 0.42376\n",
      "log loss of GBDT on valid set: 0.42397\n",
      "training: min_samples_leaf =  26\n",
      "log loss of GBDT on train set: 0.42387\n",
      "log loss of GBDT on valid set: 0.42356\n",
      "training: min_samples_leaf =  27\n",
      "log loss of GBDT on train set: 0.42315\n",
      "log loss of GBDT on valid set: 0.42341\n",
      "training: min_samples_leaf =  28\n",
      "log loss of GBDT on train set: 0.42315\n",
      "log loss of GBDT on valid set: 0.42393\n",
      "training: min_samples_leaf =  29\n",
      "log loss of GBDT on train set: 0.42438\n",
      "log loss of GBDT on valid set: 0.42503\n",
      "{'n_estimators': 20, 'max_depth': 8, 'min_samples_split': 85, 'min_samples_leaf': 14}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "2710"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### min_samples_leaf\n",
    "log_loss_train = []\n",
    "log_loss_valid = []\n",
    "\n",
    "for msl in range(1,30,1):\n",
    "    print('training: min_samples_leaf = ', msl)\n",
    "    \n",
    "    params['min_samples_leaf'] = msl\n",
    "    gbdt_model.set_params(**params)\n",
    "    gbdt_model.fit(X_train_gbdt, y_train_gbdt)\n",
    "    # scores\n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_train_gbdt)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_train_gbdt, y_pred_gbdt)\n",
    "    print('log loss of GBDT on train set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_train.append(log_loss_gbdt)\n",
    "    \n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_valid)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_valid, y_pred_gbdt)\n",
    "    print('log loss of GBDT on valid set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_valid.append(log_loss_gbdt)\n",
    "    \n",
    "    \n",
    "    mean_merror = log_loss_gbdt\n",
    "    \n",
    "\n",
    "    if mean_merror < max_merror:\n",
    "        max_merror = mean_merror\n",
    "        best_params['min_samples_leaf'] = msl\n",
    "                \n",
    "print(best_params) \n",
    "params['min_samples_leaf'] = best_params['min_samples_leaf']   \n",
    "\n",
    "gc.collect()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T11:42:36.367471Z",
     "start_time": "2019-03-12T11:42:35.907701Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "## plot the curve\n",
    "f1 = plt.figure(4)\n",
    "min_samples_leafs = range(1,30,1)\n",
    "plt.plot(min_samples_leafs, log_loss_train, label='train')\n",
    "plt.plot(min_samples_leafs, log_loss_valid, label='valid')\n",
    "plt.xlabel('min_samples_leaf')\n",
    "plt.ylabel('log_loss')\n",
    "plt.title('min_samples_leaf')\n",
    "plt.legend()\n",
    "plt.grid(True, linewidth=0.3)\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "max_merror = float('Inf')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "training: learning_rate =  0.01\n",
      "log loss of GBDT on train set: 0.45157\n",
      "log loss of GBDT on valid set: 0.45093\n",
      "training: learning_rate =  0.03\n",
      "log loss of GBDT on train set: 0.43863\n",
      "log loss of GBDT on valid set: 0.43809\n",
      "training: learning_rate =  0.05\n",
      "log loss of GBDT on train set: 0.43175\n",
      "log loss of GBDT on valid set: 0.43123\n",
      "training: learning_rate =  0.07\n",
      "log loss of GBDT on train set: 0.42767\n",
      "log loss of GBDT on valid set: 0.42733\n",
      "training: learning_rate =  0.09\n",
      "log loss of GBDT on train set: 0.42530\n",
      "log loss of GBDT on valid set: 0.42518\n",
      "training: learning_rate =  0.11\n",
      "log loss of GBDT on train set: 0.42378\n",
      "log loss of GBDT on valid set: 0.42375\n",
      "training: learning_rate =  0.13\n",
      "log loss of GBDT on train set: 0.42264\n",
      "log loss of GBDT on valid set: 0.42277\n",
      "training: learning_rate =  0.15\n",
      "log loss of GBDT on train set: 0.42388\n",
      "log loss of GBDT on valid set: 0.42383\n",
      "training: learning_rate =  0.17\n",
      "log loss of GBDT on train set: 0.42305\n",
      "log loss of GBDT on valid set: 0.42315\n",
      "training: learning_rate =  0.19\n",
      "log loss of GBDT on train set: 0.42287\n",
      "log loss of GBDT on valid set: 0.42297\n",
      "training: learning_rate =  0.21\n",
      "log loss of GBDT on train set: 0.42341\n",
      "log loss of GBDT on valid set: 0.42367\n",
      "{'n_estimators': 20, 'max_depth': 8, 'min_samples_split': 85, 'min_samples_leaf': 14, 'learning_rate': 0.13}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "2450"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### learning_rate\n",
    "log_loss_train = []\n",
    "log_loss_valid = []\n",
    "\n",
    "learning_rate = [0.01,0.03,0.05,0.07,0.09,0.11,0.13,0.15,0.17,0.19,0.21]\n",
    "for lr in learning_rate:\n",
    "    print('training: learning_rate = ', lr)\n",
    "    \n",
    "    params['learning_rate'] = lr\n",
    "    gbdt_model.set_params(**params)\n",
    "    gbdt_model.fit(X_train_gbdt, y_train_gbdt)\n",
    "    # scores\n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_train_gbdt)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_train_gbdt, y_pred_gbdt)\n",
    "    print('log loss of GBDT on train set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_train.append(log_loss_gbdt)\n",
    "    \n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_valid)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_valid, y_pred_gbdt)\n",
    "    print('log loss of GBDT on valid set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_valid.append(log_loss_gbdt)\n",
    "    \n",
    "    \n",
    "    mean_merror = log_loss_gbdt\n",
    "    \n",
    "\n",
    "    if mean_merror < max_merror:\n",
    "        max_merror = mean_merror\n",
    "        best_params['learning_rate'] = lr\n",
    "                \n",
    "print(best_params) \n",
    "params['learning_rate'] = best_params['learning_rate']   \n",
    "\n",
    "gc.collect()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "## plot the curve\n",
    "f1 = plt.figure(4)\n",
    "learnig_rate = [0.01,0.03,0.05,0.07,0.09,0.11,0.13,0.15,0.17,0.19,0.21]\n",
    "plt.plot(learnig_rate, log_loss_train, label='train')\n",
    "plt.plot(learnig_rate, log_loss_valid, label='valid')\n",
    "plt.xlabel('learnig_rate')\n",
    "plt.ylabel('log_loss')\n",
    "plt.title('learnig_rate')\n",
    "plt.legend()\n",
    "plt.grid(True, linewidth=0.3)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "max_merror = float('Inf')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "training: n_estimators =  20\n",
      "log loss of GBDT on train set: 0.42264\n",
      "log loss of GBDT on valid set: 0.42277\n",
      "training: n_estimators =  22\n",
      "log loss of GBDT on train set: 0.42222\n",
      "log loss of GBDT on valid set: 0.42237\n",
      "training: n_estimators =  24\n",
      "log loss of GBDT on train set: 0.42184\n",
      "log loss of GBDT on valid set: 0.42215\n",
      "training: n_estimators =  26\n",
      "log loss of GBDT on train set: 0.42150\n",
      "log loss of GBDT on valid set: 0.42189\n",
      "training: n_estimators =  28\n",
      "log loss of GBDT on train set: 0.42122\n",
      "log loss of GBDT on valid set: 0.42166\n",
      "training: n_estimators =  30\n",
      "log loss of GBDT on train set: 0.42106\n",
      "log loss of GBDT on valid set: 0.42142\n",
      "training: n_estimators =  32\n",
      "log loss of GBDT on train set: 0.42102\n",
      "log loss of GBDT on valid set: 0.42151\n",
      "training: n_estimators =  34\n",
      "log loss of GBDT on train set: 0.42062\n",
      "log loss of GBDT on valid set: 0.42102\n",
      "training: n_estimators =  36\n",
      "log loss of GBDT on train set: 0.42046\n",
      "log loss of GBDT on valid set: 0.42099\n",
      "training: n_estimators =  38\n",
      "log loss of GBDT on train set: 0.42039\n",
      "log loss of GBDT on valid set: 0.42092\n",
      "training: n_estimators =  40\n",
      "log loss of GBDT on train set: 0.42008\n",
      "log loss of GBDT on valid set: 0.42046\n",
      "training: n_estimators =  42\n",
      "log loss of GBDT on train set: 0.42004\n",
      "log loss of GBDT on valid set: 0.42037\n",
      "training: n_estimators =  44\n",
      "log loss of GBDT on train set: 0.41964\n",
      "log loss of GBDT on valid set: 0.41990\n",
      "training: n_estimators =  46\n",
      "log loss of GBDT on train set: 0.41981\n",
      "log loss of GBDT on valid set: 0.42009\n",
      "training: n_estimators =  48\n",
      "log loss of GBDT on train set: 0.41969\n",
      "log loss of GBDT on valid set: 0.41990\n",
      "training: n_estimators =  50\n",
      "log loss of GBDT on train set: 0.41925\n",
      "log loss of GBDT on valid set: 0.41954\n",
      "{'n_estimators': 50, 'max_depth': 8, 'min_samples_split': 85, 'min_samples_leaf': 14, 'learning_rate': 0.13}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "2576"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### 再次精细调 n_estimators\n",
    "\n",
    "log_loss_train = []\n",
    "log_loss_valid = []\n",
    "\n",
    "for nt in range(20,51,2):\n",
    "    print('training: n_estimators = ', nt)\n",
    "    \n",
    "    params['n_estimators'] = nt\n",
    "    gbdt_model.set_params(**params)\n",
    "    gbdt_model.fit(X_train_gbdt, y_train_gbdt)\n",
    "    # scores\n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_train_gbdt)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_train_gbdt, y_pred_gbdt)\n",
    "    print('log loss of GBDT on train set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_train.append(log_loss_gbdt)\n",
    "    \n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_valid)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_valid, y_pred_gbdt)\n",
    "    print('log loss of GBDT on valid set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_valid.append(log_loss_gbdt)\n",
    "    \n",
    "    mean_merror = log_loss_gbdt\n",
    "    \n",
    "\n",
    "    if mean_merror < max_merror:\n",
    "        max_merror = mean_merror\n",
    "        best_params['n_estimators'] = nt\n",
    "        \n",
    "\n",
    "print(best_params)\n",
    "\n",
    "params['n_estimators'] = best_params['n_estimators']\n",
    "    \n",
    "\n",
    "gc.collect()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "## plot the curve\n",
    "f1 = plt.figure(1)\n",
    "n_estimators =  range(20,51,2)\n",
    "plt.plot(n_estimators, log_loss_train, label='train')\n",
    "plt.plot(n_estimators, log_loss_valid, label='valid')\n",
    "plt.xlabel('n_estimators')\n",
    "plt.ylabel('log_loss')\n",
    "plt.title('n_estimators')\n",
    "plt.legend()\n",
    "plt.grid(True, linewidth=0.3)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'learning_rate': 0.13, 'n_estimators': 50, 'max_depth': 8, 'min_samples_split': 85, 'min_samples_leaf': 14, 'subsample': 0.01, 'max_leaf_nodes': None, 'random_state': 1, 'verbose': 0}\n"
     ]
    }
   ],
   "source": [
    "print(params)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
